package logicaDeNegocio;

import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JDialog;
import interfaz.Error;
import interfaz.Mensaje;
import entidades.*;
import entidades.DAOs.DAOequipos;
import entidades.DAOs.DAOfechas;
import entidades.DAOs.DAOjugadores;
import entidades.DAOs.DAOpartidos;
import entidades.DTOs.DTOFecha;

/**
 * @author sg
 * @version 1.0
 * @created 13-nov-2013 06:33:08 p.m.
 */
public class GestionDeFechas {
	
	public static void cerrarFecha(int id_fecha, Usuario usuario) throws SQLException, ClassNotFoundException{
		
		Fecha fechaActual = new Fecha();
		fechaActual = DAOfechas.getFecha(id_fecha);
		if(!fechaActual.estanPartidosCargados()) {
			
			Error dlgErr = new Error("No se encuentran cargados todos los partidos");
			dlgErr.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dlgErr.setVisible(true);
		}
		else{
			try{
				GestionDePuntajes.calcularPuntajeDeFecha(fechaActual, usuario);
				try{
					GestionDePuntajes.crearAuditoria(usuario, 1);
				}catch(Exception e){
					Error dlErr = new Error("NO SE ENCUENTRA EL USUARIO PARA GENERAR AUDITORIA");
					dlErr.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
					dlErr.setVisible(true);
				}
				}
			catch(Exception exception){ 
				System.out.println("Inconveniente al calcular puntajes de la fecha");
			}
			finally{
				//DAOfechas.setEstadoFecha(id_fecha, 2);
				int idFechaSgte = id_fecha+1;
				//DAOfechas.setEstadoFecha(idFechaSgte, 1);
				//GestionDeEquipos.crearFormaciones(id_fecha);
		
				/*Mensaje de fecha cerrada*/
				Mensaje dlgMss = new Mensaje("La fecha ha sido cerrada correctamente");
				dlgMss.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				dlgMss.setVisible(true);
			}
		}
		
	}
	
	public static Object[][] datosTablaPartidos() throws SQLException, ClassNotFoundException{
		int idFechaVeda;
		idFechaVeda = DAOfechas.getIdFechaVeda();
		ArrayList <Partido> partidosVeda = new ArrayList <Partido>();
		partidosVeda = DAOpartidos.selectPartidos(idFechaVeda);
		Object[][] tabla = new Object [10][3];
		Fecha fechaVeda = new Fecha();
		fechaVeda.setId_fecha(idFechaVeda);
		
		for(int i=0; i<partidosVeda.size(); i++){
			int idEquipoLocal = partidosVeda.get(i).getId_equipoLocal();
			int idEquipoVisitante = partidosVeda.get(i).getId_equipoVisitante();
			String estadoPartido = new String();
			if(fechaVeda.partidoCargado(partidosVeda.get(i))) estadoPartido="Cargado";
			else estadoPartido="NO Cargado";
			
			tabla[i][0] = DAOequipos.getNombreEquipo1raDivision(idEquipoLocal);
			tabla[i][1] = DAOequipos.getNombreEquipo1raDivision(idEquipoVisitante);
			tabla[i][2] = estadoPartido;
			
		}
		
		return tabla;
		
	}

	public GestionDeFechas(){

	}

	public void finalize() throws Throwable {

	}

	public static boolean fechaAbierta() throws SQLException, ClassNotFoundException {
	Fecha ultimaFecha = DAOfechas.getUltimaFechaAbierta();
	if(ultimaFecha.getEstadoFecha().getNombre().equals("Abierta"))
		return true;
	else
		return false;
	}

	public static Fecha getUltimaFecha() throws SQLException, ClassNotFoundException {
		try {
			return DAOfechas.getUltimaFecha();
			}
		catch (SQLException a){
			a.printStackTrace();
			return new Fecha();
			}
		catch(ClassNotFoundException b){
			b.printStackTrace();
			return new Fecha();
			}
		}

	public static Fecha getUltimaFechaAbierta() throws SQLException, ClassNotFoundException {
		try {
			return DAOfechas.getUltimaFechaAbierta();
			}
		catch (SQLException a){
			a.printStackTrace();
			return new Fecha();
			}
		catch(ClassNotFoundException b){
			b.printStackTrace();
			return new Fecha();
			}
		}
	
	public static ArrayList<DTOFecha> getFechas() {
		try {return DAOfechas.getFechas();
		}
		catch (SQLException a){
			a.printStackTrace();
			return null;
			}
		catch(ClassNotFoundException b){
			b.printStackTrace();
			return null;
			}
		// TODO Auto-generated method stub
		
	}
}
//end Gestion De Fechas